package com.kyd.push.mq;

import com.alibaba.fastjson.JSON;

/**
 * ProduceRequest
 *
 * @author kejw on 2018/9/27
 */
public class ProduceRequest<T> {

	/**
	 * Message 所属的 Topic
	 */
	private String topic;

	/**
	 * Message Tag 可理解为 Gmail 中的标签，对消息进行再归类，方便 Consumer 指定过滤条件在 MQ 服务器过滤
	 */
	private String tagA;

	/**
	 * Message Body 可以是任何二进制形式的数据， MQ 不做任何干预
	 * 需要 Producer 与 Consumer 协商好一致的序列化和反序列化方式
	 */
	private T body;

	/**
	 * 设置代表消息的业务关键属性，请尽可能全局唯一
	 * 以方便您在无法正常收到消息情况下，可通过 MQ 控制台查询消息并补发
	 * 注意：不设置也不会影响消息正常收发
	 */
	private String msgKey;

	/**
	 * msgId
	 */
	private String msgId;

	public ProduceRequest() {}

	public ProduceRequest(String topic, String tagA, T body) {
		this.topic = topic;
		this.tagA = tagA;
		this.body = body;
	}


	public String getBodyJson() {
		return JSON.toJSONString(this.body);
	}

	public byte[] getBodyBytes() {
		return JSON.toJSONString(this.body).getBytes();
	}

	public String getTopic() {
		return topic;
	}

	public ProduceRequest<T> setTopic(String topic) {
		this.topic = topic;
		return this;
	}

	public String getTagA() {
		return tagA;
	}

	public ProduceRequest<T> setTagA(String tagA) {
		this.tagA = tagA;
		return this;
	}

	public T getBody() {
		return body;
	}

	public ProduceRequest<T> setBody(T body) {
		this.body = body;
		return this;
	}

	public String getMsgKey() {
		return msgKey;
	}

	public ProduceRequest<T> setMsgKey(String msgKey) {
		this.msgKey = msgKey;
		return this;
	}

	public String getMsgId() {
		return msgId;
	}

	public ProduceRequest<T> setMsgId(String msgId) {
		this.msgId = msgId;
		return this;
	}
}
